CHOICE
이 명령어는 GOTO 명령어를 사용하여 다중 분기문을 작성하기 위하여 사용하는 것으로, 일반적으로 다중 배치 프로그램을 작성하기 위하여 사용되는 배치 프로그램 명령어이다.
이 명령어는 배치 프로그램에서 사용자가 지정한 프롬프트 상태를 유지하고 있다가 지정된 시간이 경과되거나 지정된 문자를 지정하면 다음 명령어를 실행한다.
이 경우 CHOICE 명령어는 에러 수준 종료 코드를 운영 체제에 돌려주는데, 종료 코드와 GOTO 명령어를 이용하여 작업을 세분할 수 있다.
■ 사용법
CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]
■ 옵션 및 매개변수

text | 사용자의 선택을 기다리는 프롬프트 앞에 출력하고자 하는 문자열을 지정한다. 만약, 프롬프트 앞에 표시될 문자열의 일부로 옵션 부호(/)를 사용하려면 따옴표를 사용해야 한다. 문자열을 지정하지 않으면 선택할 프롬프트만 나타난다.
/c[:]choices | 프롬프트로 선택할 수 있는 문자를 지정한다. 여러 문자를 지정하는 경우에는 콤마(.)를 분리 문자로 사용하며, 지정한 문자는 괄호 안에 나타나고 물음표 다음에 표시된다. /c 옵션을 지정하지 않는 경우 Y/N을 디폴트 값으로 사용한다. 콜론(:)은 생략할 수 있다.
/n | 사용자가 항목을 선택하도록 대기하는 프롬프트가 나타나지 않도록 한다. 그러나 프롬프트 앞의 문자열은 표시된다. 만약, /n 옵션을 지정하지 않으면 CHOICE 명령어 라인에 지정한 선택 문자는 유효하다.
/s | 대문자와 소문자를 구분하여 받아들이도록 지정하기 위하여 사용하는 옵션이다. /s 옵션을 지정하지 않으면 사용자가 지정한 선택 문자의 대소문자를 구분하지 않고 모두 받아 들인다.
/t[:]c,nn | 사용자가 선택 문자를 지정하지 않을 때 디폴트로 선택될 문자와 기다리는 시간을 지정한다.
c | 사용자가 문자를 선택하지 않을 때 디폴트로 선택될 문자를 지정한다. 이 문자는 /c 옵션에서 지정한 선택 문자 안에 있는 것이어야 한다.
nn | c 값을 디폴트로 선택하기 전에 대기할 시간을 초 단위로 지정한다. 지정할 수 있는 값은 0∼99이다. 0초를 지정하면 항상 디폴트 값이 사용된다.

■ 사용상의 주의
☞ 작업 분할하기
CHOICE 명령어는 작업을 분할하기 위해 사용한다. 즉, Config.sys에서는 다중 부트 분할을 만들어 사용자가 원하는 시스템 구성으로 컴퓨터를 시작할 수 있는데, Autoexec.bat에서는 이 명령어를 사용하여 다중 환경으로 구성할 수 있다.
CHOICE 명령어를 사용한 다중 부트 분할에 대해서는 "사용 예"를 참조하기 바란다.
☞ CHOICE의 메시지
다음은 배치 프로그램에서 CHOICE 명령어를 사용하는 방법과 그에 따른 메시지를 나타낸다.
CHOICE 명령어에 선택 문자만을 지정한 경우
명령어 줄 choice /c:ync
나타나는 메시지 [Y,N,C]?
CHOICE 명령어에 선택 문자와 문자열을 지정한 경우
명령어 줄 choice /c:ync Yes, No, or Continue
나타나는 메시지 Yes, No, or Continue [Y,N,C]?
CHOICE 명령어에 프롬프트를 생략하는 /n 옵션을 사용한 경우
명령어 줄 choice /n Yes, No, or Continue?
나타나는 메시지 Yes, No, or Continue?
CHOICE 명령어에 /t 옵션을 사용한 경우
명령어 줄 choice /c:ync /t:y,5
나타나는 메시지 [Y,N,C]?
위 의 예에서 만약 5초 이내에 선택 문자 중에서 아무 키라도 누르지 않으면 CHOICE는 자동으로 <Y>를 선택하고 종료 코드 값으로 1을 운영 체제에 넘겨준다.
5초 이내에 선택 문자를 누르면 CHOICE는 선택한 값에 대응되는 종료 코드를 넘겨준다.
☞ 종료 코드
CHOICE 명령어는 실행을 종료한 뒤 에러 수준 종료 코드를 운영 체제에 돌려주는데, 사용자는 종료 코드를 이용하여 다중 분기문을 작성할 수 있다.
다음은 CHOICE가 운영 체제에 돌려주는 종료 코드에 관한 설명이다.
0 배치 프로그램을 중단하기 위해 사용자가 <Ctrl+BREAK> 혹은 <Ctrl+C>를 눌렀다.
1 사용자가 첫 번째 선택 문자를 선택하였다.
2 사용자가 두 번째 선택 문자를 선택하였다.
3 사용자가 세 번째 선택 문자를 선택하였다.
. .
. .
255 에러가 발생하였다.
종료 코드를 이용하는 방법에 관한 자세한 사항은 If 명령어를 참조하거나, 다음에 설명할 "사용 예"를 참조하기 바란다.
■ 사용 예
컴퓨터를 켤 때 C 드라이브에 있는 파일들의 단편화를 제거하는 프로그램인 DEFRAG를 실행할 것인지 사용자에게 확인하도록 설정하려면 Autoexec.bat 파일에 다음과 같은 내용을 추가한다.
choice Defrag drive /t:n,5
if errorlevel 255 goto error
if errorlevel 2 goto SkipDefrag
defrag c: /f /se /b
:error
echo Error Found!
pause
:SkipDefrag
위의 예에서 5초 이내에 <Y>를 누르면 단편화 제거 프로그램이 실행되고 CHOICE는 1의 값을 종료 코드 값으로 운영 체제에 돌려준다.
5초 이내에 <Y> 키를 누르지 않거나 <N> 키를 누르면 C 드라이브의 단편화 제거 프로그램은 실행되지 않는다.
만약, 단편화 제거 프로그램이 실행된다면 /b 옵션을 사용하였기 때문에 프로그램이 종료됨과 동시에 컴퓨터를 재시동하게 된다.
다음 배치 프로그램의 예는 CHOICE 명령어를 이용하여 HWP, Windows, DOS 텍스트 편집기(Edit), 백업 프로그램 중에서 하나를 선택하는 방법을 보여준다. 단, 위의 모든 프로그램의 실행 파일을 하드디스크에 있고, PATH 명령어에 경로가 추가되어 있다고 가정한다.
@echo off
cls
echo 1. HWP
echo 2. Windows
echo 3. MS-DOS Editor
echo 4. Backup
choice /c:1234
if errorlevel 255 goto Exit
if errorlevel 4 goto Backup
if errorlevel 3 goto Edit
if errorlevel 2 goto Win
if errorlevel 1 goto Hwp
:Backup
c:\dos\msbackup
goto Exit
:Edit
edit
goto Exit
:Win
c:\windows\win
goto Exit
:Hwp
c:\hwp21\hwp
:Exit